home *** CD-ROM | disk | FTP | other *** search
-
- Zur Addressarithmetik:
-
- Wenn der Assembler relocatable code erzeugt ist es natuerlich
- einigermassen umoeglich Addressen zu multipliziern und dividieren.
- Subtrathieren kann man sie solange die relativen schon definiert
- sind. relativ - relativ = absolute
-
- Instruktionen wie
-
- MOV R0, #Addresse / 256
-
- wo Addresse eine relocatale address ist, koennen nicht erzeugt werden,
- da der Wert von Address beim Assemblieren unbekannt ist.
-
- Das man doch so einiges machen kann, zeigt folgendes Beispiel:
-
-
- .PROC test
-
- .ENTRY start
-
-
- .MACRO LOAD
- \load
- .IF \load - %2 > 4084.
- MOV %1, #((\load - %2 + 8 + 8) / 100) << 8
- ADD %1, %1, #((\load - %2 + 8 + 8) & 0FF)
- SUB %1, PC, %1
- LDR %1, [%1]
- .ELSE
- LDR %1, %2
- .ENDC
- .ENDM
-
-
- textaddress:
- .WORD text
- text:
- .STRING "This is a far away string."
- .ALIGN
- .BLOCK 2000
-
- start:
- LOAD R0, textaddress
- SWI OS_Write0
- SWI OS_NewLine
- SWI OS_Exit
-
- .END
-
-
- Dies ist sogar relocatable code, man kann ihn linken.
-
-
-
-